  .text
  .align  2
  .global RV_sgemm_v1
RV_sgemm_v1:
  
   #保存上下文环境
  addi sp, sp, -64
  sd s7, 56(sp)
  sd s6, 48(sp)
  sd s5, 40(sp)
  sd s4, 32(sp)
  sd s3, 24(sp)
  sd s2, 16(sp)
  sd s1,  8(sp)
  sd s0,  0(sp)  

  vsetvli t0, zero, e32, m1, ta, ma
  li s11, 3
  li s10, 1
 
  mv a6, a1
  mv a7, a2  
 
  fcvt.s.w ft11, x0

LOOP_An_Bn:
  mv s8, a5

LOOP_A_Bn:
  addi s8, s8, -4
  mv s9, a0        
  addi s9, s9, -4  

  vxor.vv v16, v16, v16
  vxor.vv v17, v17, v17
  vxor.vv v18, v18, v18
  vxor.vv v19, v19, v19
  vxor.vv v20, v20, v20
  vxor.vv v21, v21, v21
  vxor.vv v22, v22, v22
  vxor.vv v23, v23, v23
  vxor.vv v24, v24, v24
  vxor.vv v25, v25, v25
  vxor.vv v26, v26, v26
  vxor.vv v27, v27, v27
  vxor.vv v28, v28, v28
  vxor.vv v29, v29, v29
  vxor.vv v30, v30, v30
  vxor.vv v31, v31, v31

  addi t1, a1, 16 
  addi t2, a1, 32
  addi t3, a1, 48
  addi t4, a1, 64
  addi t5, a1, 80
  addi t6, a1, 96
  addi t0, a1, 112

  vle32.v v0, (a1) 
  vle32.v v1, (t1)
  vle32.v v2, (t2)
  vle32.v v3, (t3)
  vle32.v v4, (t4)
  vle32.v v5, (t5)
  vle32.v v6, (t6)
  vle32.v v7, (t0)  

  flw ft0, 0(a2)
  flw ft1, 4(a2)
  flw ft2, 8(a2)
  flw ft3, 12(a2)
  flw ft4, 16(a2)
  flw ft5, 20(a2)
  flw ft6, 24(a2)
  flw ft7, 28(a2)
  
  addi a1, a1, 128
  addi a2, a2, 32

  addi s1, a1, 16 
  addi s2, a1, 32
  addi s3, a1, 48
  addi s4, a1, 64
  addi s5, a1, 80
  addi s6, a1, 96
  addi s7, a1, 112

  LOOP4:
  addi s9, s9, -4  
  vfmacc.vf v16, ft0, v0
  vfmacc.vf v17, ft0, v1
  vle32.v v8, (a1)
  
  addi a1, a1, 128     
  addi t1, a1, 16 
  addi t2, a1, 32
  addi t3, a1, 48
  addi t4, a1, 64
  addi t5, a1, 80
  addi t6, a1, 96
  addi t0, a1, 112   

  vfmacc.vf v18, ft0, v2
  vfmacc.vf v19, ft0, v3
  flw fa2, 0(a2)
  flw fa3, 4(a2)
  
  vfmacc.vf v20, ft1, v0
  vfmacc.vf v21, ft1, v1
  vle32.v v9, (s1)
  
  vfmacc.vf v22, ft1, v2
  vfmacc.vf v23, ft1, v3
  flw fa4, 8(a2)
  flw fa5, 12(a2)

  vfmacc.vf v24, ft2, v0
  vfmacc.vf v25, ft2, v1
  vle32.v v10, (s2)
 
  vfmacc.vf v26, ft2, v2
  vfmacc.vf v27, ft2, v3
  vle32.v v11, (s3)

  vfmacc.vf v28, ft3, v0
  vfmacc.vf v29, ft3, v1
  flw fa6, 16(a2)
  flw fa7, 20(a2)
  
  vfmacc.vf v30, ft3, v2
  vfmacc.vf v31, ft3, v3
  vle32.v v12, (s4)
  
  vfmacc.vf v16, ft4, v4
  vfmacc.vf v17, ft4, v5
  flw ft8, 24(a2)
  flw ft9, 28(a2)
  addi a2, a2, 32  
  
  vfmacc.vf v18, ft4, v6
  vfmacc.vf v19, ft4, v7
  vle32.v v13, (s5)
  
  vfmacc.vf v20, ft5, v4
  vfmacc.vf v21, ft5, v5
  vle32.v v14, (s6)
  
  vfmacc.vf v22, ft5, v6
  vfmacc.vf v23, ft5, v7
  vle32.v v15, (s7)  
  
  vfmacc.vf v24, ft6, v4
  vfmacc.vf v25, ft6, v5
  vle32.v v0, (a1)             
  
  vfmacc.vf v26, ft6, v6
  vfmacc.vf v27, ft6, v7
  flw ft0, 0(a2)             
  flw ft1, 4(a2)
  
  vfmacc.vf v28, ft7, v4
  vfmacc.vf v29, ft7, v5
  vle32.v v1, (t1)

  vfmacc.vf v30, ft7, v6
  vfmacc.vf v31, ft7, v7
  flw ft2, 8(a2)
  flw ft3, 12(a2)

  vfmacc.vf v16, fa2, v8
  vfmacc.vf v17, fa2, v9
  vle32.v v2, (t2)
  
  vfmacc.vf v18, fa2, v10
  vfmacc.vf v19, fa2, v11
  flw ft4, 16(a2)
  flw ft5, 20(a2) 

  vfmacc.vf v20, fa3, v8
  vfmacc.vf v21, fa3, v9
  vle32.v v3, (t3)
  
  vfmacc.vf v22, fa3, v10
  vfmacc.vf v23, fa3, v11
  vle32.v v4, (t4)

  vfmacc.vf v24, fa4, v8
  vfmacc.vf v25, fa4, v9
  vle32.v v5, (t5)
  
  vfmacc.vf v26, fa4, v10
  vfmacc.vf v27, fa4, v11
  vle32.v v6, (t6)

  vfmacc.vf v28, fa5, v8
  vfmacc.vf v29, fa5, v9
  flw ft6, 24(a2)
  flw ft7, 28(a2)           

  vfmacc.vf v30, fa5, v10
  vfmacc.vf v31, fa5, v11
  vle32.v v7, (t0)            

  addi a1, a1, 128        
  addi a2, a2, 32         

  addi s1, a1, 16  
  addi s2, a1, 32
  addi s3, a1, 48
  addi s4, a1, 64
  addi s5, a1, 80
  addi s6, a1, 96
  addi s7, a1, 112
  
  vfmacc.vf v16, fa6, v12
  vfmacc.vf v17, fa6, v13
  vfmacc.vf v18, fa6, v14
  vfmacc.vf v19, fa6, v15
  
  vfmacc.vf v20, fa7, v12
  vfmacc.vf v21, fa7, v13
  vfmacc.vf v22, fa7, v14
  vfmacc.vf v23, fa7, v15

  vfmacc.vf v24, ft8, v12
  vfmacc.vf v25, ft8, v13
  vfmacc.vf v26, ft8, v14
  vfmacc.vf v27, ft8, v15

  vfmacc.vf v28, ft9, v12
  vfmacc.vf v29, ft9, v13
  vfmacc.vf v30, ft9, v14
  vfmacc.vf v31, ft9, v15
  
    ble s9, s11, LOOP2
  #if s9 > 3, jump LOOP4
   j LOOP4
  
LOOP2:
  vfmacc.vf v16, ft0, v0
  vfmacc.vf v17, ft0, v1
  vle32.v v8, (a1)

  vfmacc.vf v18, ft0, v2
  vfmacc.vf v19, ft0, v3
  flw fa2, 0(a2)
  flw fa3, 4(a2)

  vfmacc.vf v20, ft1, v0
  vfmacc.vf v21, ft1, v1
  vle32.v v9, (s1)

  vfmacc.vf v22, ft1, v2
  vfmacc.vf v23, ft1, v3
  flw fa4, 8(a2)
  flw fa5, 12(a2)

  vfmacc.vf v24, ft2, v0
  vfmacc.vf v25, ft2, v1
  vle32.v v10, (s2)

  vfmacc.vf v26, ft2, v2
  vfmacc.vf v27, ft2, v3
  flw fa6, 16(a2)
  flw fa7, 20(a2)

  vfmacc.vf v28, ft3, v0
  vfmacc.vf v29, ft3, v1
  vle32.v v11, (s3)

  vfmacc.vf v30, ft3, v2
  vfmacc.vf v31, ft3, v3
  flw ft8, 24(a2)
  flw ft9, 28(a2)

  vfmacc.vf v16, ft4, v4
  vfmacc.vf v17, ft4, v5
  vle32.v v12, (s4)

  vfmacc.vf v18, ft4, v6
  vfmacc.vf v19, ft4, v7
  vle32.v v13, (s5)

  vfmacc.vf v20, ft5, v4
  vfmacc.vf v21, ft5, v5
  vle32.v v14, (s6)

  vfmacc.vf v22, ft5, v6
  vfmacc.vf v23, ft5, v7
  vle32.v v15, (s7)

  vfmacc.vf v24, ft6, v4
  vfmacc.vf v25, ft6, v5
  vfmacc.vf v26, ft6, v6
  vfmacc.vf v27, ft6, v7
  vfmacc.vf v28, ft7, v4
  vfmacc.vf v29, ft7, v5
  vfmacc.vf v30, ft7, v6
  vfmacc.vf v31, ft7, v7
  
  vfmacc.vf v16, fa2, v8
  vfmacc.vf v17, fa2, v9
  vfmacc.vf v18, fa2, v10
  vfmacc.vf v19, fa2, v11
  vfmacc.vf v20, fa3, v8
  vfmacc.vf v21, fa3, v9
  vfmacc.vf v22, fa3, v10
  vfmacc.vf v23, fa3, v11
  vfmacc.vf v24, fa4, v8
  vfmacc.vf v25, fa4, v9
  vfmacc.vf v26, fa4, v10
  vfmacc.vf v27, fa4, v11
  vfmacc.vf v28, fa5, v8
  vfmacc.vf v29, fa5, v9
  vfmacc.vf v30, fa5, v10
  vfmacc.vf v31, fa5, v11

  vfmacc.vf v16, fa6, v12
  vfmacc.vf v17, fa6, v13
  vfmacc.vf v18, fa6, v14
  vfmacc.vf v19, fa6, v15
  vfmacc.vf v20, fa7, v12
  vfmacc.vf v21, fa7, v13
  vfmacc.vf v22, fa7, v14
  vfmacc.vf v23, fa7, v15
  vfmacc.vf v24, ft8, v12
  vfmacc.vf v25, ft8, v13
  vfmacc.vf v26, ft8, v14
  vfmacc.vf v27, ft8, v15
  vfmacc.vf v28, ft9, v12
  vfmacc.vf v29, ft9, v13
  vfmacc.vf v30, ft9, v14
  vfmacc.vf v31, ft9, v15
  addi a1, a1, 128
  addi a2, a2, 32

MULTIPLY_alpha:
  vsetvli t0, zero, e32, m8
  vfmul.vf v16, v16, fa0
  vfmul.vf v24, v24, fa0
  
beta_NOTZERO:
  #vsetvli t0, zero, e32, m8
  vle32.v v0, (a3)
  addi t1, a3, 128
  vle32.v v8, (t1)
  vfmacc.vf v16, fa1, v0
  vfmacc.vf v24, fa1, v8

  vse32.v v16, (a3)
  addi a3, a3, 256
  vse32.v v24, (t1)

END_one:
  vsetvli t0, zero, e32, m1
  mv s0, a1
  mv a1, a6
  bgtz s8, LOOP_A_Bn
  addi a4, a4, -16
  mv a1, s0
  mv a6, s0
  mv a2, a7
  bgtz a4, LOOP_An_Bn

  ld s7, 56(sp)
  ld s6, 48(sp)
  ld s5, 40(sp)
  ld s4, 32(sp)
  ld s3, 24(sp)
  ld s2, 16(sp)
  ld s1,  8(sp)
  ld s0,  0(sp)
  addi sp, sp, 64
ret

#################################################################################
如果使用 vsetvli t0, zero, e32, m8 可以大量减少如下代码，且提高性能！
  beta_ZERO:
  addi t0, a3, 16
  addi t1, a3, 32
  addi t2, a3, 48
  addi t3, a3, 64
  addi t4, a3, 80
  addi t5, a3, 96
  addi t6, a3, 112
  addi s1, a3, 128
  addi s2, a3, 144
  addi s3, a3, 160
  addi s4, a3, 176
  addi s5, a3, 192
  addi s6, a3, 208
  addi s7, a3, 224

  vse32.v v16, (a3)
  vse32.v v17, (t0)
  vse32.v v18, (t1)
  vse32.v v19, (t2)
  vse32.v v20, (t3)
  addi t0, a3, 240
  vse32.v v21, (t4)
  vse32.v v22, (t5)
  vse32.v v23, (t6)
  vse32.v v24, (s1)
  vse32.v v25, (s2)
  vse32.v v26, (s3)
  vse32.v v27, (s4)
  vse32.v v28, (s5)
  vse32.v v29, (s6)
  vse32.v v30, (s7)
  vse32.v v31, (t0)


vsetvli t0, zero, e32, m8
  vle32.v v0, (a3)
  addi t1, a3, 128
  vle32.v v8, (t1)
  vfmacc.vf v16, fa1, v0
  vfmacc.vf v24, fa1, v8

  vse32.v v16, (a3)
  addi a3, a3, 256
  vse32.v v24, (t1)
###########################################################
  
  